/**
 * Created by John on 2016/7/1.
 */
exports.book = {
    '书名': '深入浅出 Node',
    '目录': [
        {
            '第1章': "Node 简介",
            '1.1': 'Node 的诞生历程',
            '1.2': 'Node 的命名与起源',
            '1.2.1': '为什么是 JavaScript',
            '1.2.2': '为什么叫 Node',
            '1.3': 'Node 给 JavaScript 带来的意义',
            '1.4': 'Node 的特点',
            '1.4.1': '异步 I/O',
            '1.4.2': '事件与回调函数',
            '1.4.3': '单线程',
            '1.4.4': '跨平台',
            '1.5': 'Node 的应用场景',
            '1.5.1': 'I/O 密集型',
            '1.5.2': '是否不擅长 CPU 密集型业务',
            '1.5.3': '与遗留系统和平共处',
            '1.5.4': '分布式应用',
            '1.6': 'Node 的使用者',
            '1.7': '参考资源'
        },
        {
            '第2章': '模块机制',
            '2.1': 'CommonJS 规范',
            '2.1.1': 'CommonJS 的出发点',
            '2.1.2': [
                'CommonJS 的模块规范',
                {'1': '模块引用'},
                {'2': '模块定义'},
                {'3': '模块标识'}
            ],
            '2.2': 'Node 的模块实现',
            '2.2.1': '优先从缓存加载',
            '2.2.2': [
                '路径分析和文件定位',
                {'1': '模块标识符分析'},
                {'2': '文件定位'}
            ],
            '2.2.3': [
                '编译模块',
                {'1': 'JavaScript 模块的编译'},
                {'2': 'C/C++ 模块的编译'},
                {'3': 'JSON 文件的编译'}
            ],
            '2.3': '核心模块',
            '2.3.1': [
                'JavaScript 核心模块的编译过程',
                {'1': '转存为 C/C++ 代码'},
                {'2': '编译 JavaScript 核心模块'}
            ],
            '2.3.2': [
                'C/C++ 核心模块的编译过程',
                {'1': '内建模块的组织形式'},
                {'2': '内建模块的导出'}
            ],
            '2.3.3': '核心模块的引入流程',
            '2.3.4': '编写核心模块',
            '2.4': 'C/C++ 扩展模块',
            '2.4.1': '前提条件',
            '2.4.2': 'C/C++ 扩展模块的编写',
            '2.4.3': 'C/C++ 扩展模块的编译',
            '2.4.4': 'C/C++ 扩展模块的加载',
            '2.5': '模块调用栈',
            '2.6': '包与 NPM',
            '2.6.1': '包结构',
            '2.6.2': '包描述文件与 NPM',
            '2.6.3': [
                'NPM 常用功能',
                {'1': '查看帮助'},
                {'2': '安装依赖包'},
                {'3': 'NPM 钩子命令'},
                {'4': '发布包'},
                {'5': '分析包'}
            ],
            '2.6.4': '局域 NPM',
            '2.6.5': 'NPM 潜在的问题',
            '2.7': '前后端共用模块',
            '2.7.1': '模块的侧重点',
            '2.7.2': 'AMD 规范',
            '2.7.3': 'CMD 规范',
            '2.7.4': '兼容多种模块规范',
            '2.8': '总结',
            '2.9': '参考资源'
        },
        {
            '第3章': '异步 I/O',
            '3.1': '为什么要异步 I/O',
            '3.1.1': '用户体验',
            '3.1.2': '资源分配',
            '3.2': '异步 I/O 实现现状',
            '3.2.1': '异步 I/O 与非阻塞 I/O',
            '3.2.2': '理想的非阻塞异步 I/O',
            '3.2.3': '现实的异步 I/O',
            '3.3': 'Node.js 的异步 I/O',
            '3.3.1': '事件循环',
            '3.3.2': '观察者',
            '3.3.3': '请求对象',
            '3.3.4': '执行回调',
            '3.3.5': '小结',
            '3.4': '非 I/O 的异步 API',
            '3.4.1': '定时器',
            '3.4.2': 'process.nextTick()',
            '3.4.3': 'setImmediate()',
            '3.5': '事件驱动与高性能服务器',
            '3.6': '总结',
            '3.7': '参考资源'
        },
        {
            '第4章': '异步编程',
            '4.1': '函数式编程',
            '4.1.1': '高阶函数',
            '4.1.2': '偏函数用法',
            '4.2': '异步编程的优势与难度',
            '4.2.1': '优势',
            '4.2.2': [
                '难点',
                {'1': '难点1: 异常处理'},
                {'2': '难点2: 函数嵌套过深'},
                {'3': '阻塞代码'},
                {'4': '多线程编程'},
                {'5': '异步转同步'}
            ],
            '4.3': '异步编程解决方案',
            '4.3.1': [
                '事件发布/订阅模式',
                {'1': '继承 events 模块'},
                {'2':'利用事件队列解决雪崩问题'},
                {'3':'多异步之间的协作方案'},
                {'4':'EventProxy 的原理'},
                {'5':'EventProxy 的异常处理'}
            ],
            '4.3.2':'Promise/Deferred 模式'
        }
    ]
};